/**
 * 首页 - 宠物店小程序主页面
 * 功能：品牌展示、核心业务入口、公告通知
 * 作者：AI Assistant
 * 日期：2024
 */
const apiService = require('../../../utils/api.js');
const auth = require('../../../utils/auth.js');
const app = getApp();

Page({

	/**
	 * 页面的初始数据
	 */
	data: {
		// 系统信息
		statusBarHeight: 44, // 状态栏高度，默认44px
		menuTop: 0, // 菜单按钮顶部距离
		menuHeight: 0, // 菜单按钮高度
		menuRight: 0, // 菜单按钮距离右边距离
		
		// 公告相关
		noticeHidden: false, // 公告是否隐藏
		noticeList: [], // 公告列表（从服务器获取）
		
		// 页面状态
		isLoading: false, // 加载状态
		hasError: false, // 错误状态
		
		// 业务数据
		storeName: '加载中...', // 店铺名称
		currentStore: null, // 当前店铺信息
		
		// 弹窗相关
		showManualBookingDialog: false // 人工预约弹窗显示状态
	},

	/**
	 * 生命周期函数--监听页面加载
	 */
	onLoad(options) {
		// 防护性检查，避免 Foundation 相关错误
		try {
			this.initPage();
			this.checkFirstLaunch();
			this.loadStoreInfo(); // 加载店铺信息
		} catch (error) {
			console.error('页面加载错误：', error);
		}
	},

	/**
	 * 生命周期函数--监听页面显示
	 */
	onShow() {
		this.reportPageView();
		this.checkNoticeStatus();
		// 同步TabBar状态（优化版本）
		this.updateTabBarStatus(0);
		// 检查是否有新选择的门店
		this.checkSelectedStore();
		// 预加载个人信息页面数据
		this.preloadUserProfileData();
	},

	/**
	 * 预加载个人信息页面数据
	 * 在用户可能切换到个人页面之前提前加载数据
	 */
	preloadUserProfileData() {
		// 延迟预加载，避免影响首页性能
		setTimeout(() => {
			try {
				const auth = require('../../../utils/auth.js');
				const apiService = require('../../../utils/api.js');
				const cacheManager = require('../../../utils/cache-manager.js');
				
				// 检查登录状态
				if (auth.checkLoginStatus()) {
					// 使用缓存管理器进行智能预加载
					const preloadTasks = [
						{
							key: 'user_info_preload',
							loader: () => auth.getUserInfo(false),
							ttl: 2 * 60 * 1000 // 2分钟缓存
						},
						{
							key: 'pet_list_preload',
							loader: () => apiService.getPetList(false),
							ttl: 3 * 60 * 1000 // 3分钟缓存
						}
					];

					// 批量预加载
					cacheManager.preloadBatch(preloadTasks).then(results => {
						console.log('[预加载] 批量预加载完成:', results.length);
					}).catch(error => {
						console.log('[预加载] 批量预加载失败:', error);
					});
				}
			} catch (error) {
				console.log('预加载数据失败:', error);
			}
		}, 2000); // 2秒后开始预加载
	},

	/**
	 * 初始化页面
	 * 获取系统信息、加载公告数据
	 */
	initPage() {
		// 获取系统信息，适配不同设备
		wx.getSystemInfo({
			success: (res) => {
				const menu = wx.getMenuButtonBoundingClientRect();
				this.setData({
					menuTop: menu.top,
					menuHeight: menu.height,
					menuRight: res.windowWidth - menu.left,
					statusBarHeight: res.statusBarHeight || 44
				});
			},
			fail: () => {
				console.warn('获取系统信息失败，使用默认状态栏高度');
			}
		});

		// 加载公告数据
		this.loadNoticeData();
	},

	/**
	 * 检查首次启动
	 * TODO: 接入开屏广告逻辑
	 */
	checkFirstLaunch() {
		try {
			const firstLaunch = wx.getStorageSync('firstLaunch');
			if (!firstLaunch) {
				// TODO: 实现开屏广告逻辑
				wx.setStorageSync('firstLaunch', true);
			}
		} catch (error) {
			console.error('检查首次启动失败：', error);
		}
	},

	/**
	 * 加载公告数据
	 * 从ax_news读取门店公告数据
	 */
	async loadNoticeData() {
		this.setData({ isLoading: true });
		
		try {
			// 获取当前门店信息
			const storeManager = app.getStoreManager();
			const currentStore = await storeManager.getNearestStore();
			
			// 调用新闻接口获取首页公告列表
			const result = await apiService.callFunction('news', 'getHomeNewsList', {});
			
			console.log('公告接口返回数据:', result);
			
			if (result.success && Array.isArray(result.data)) {
				const storeId = currentStore ? currentStore.id : null;

				const noticeList = result.data
					.filter(item => item.storeId === storeId) // Filter by storeId
					.map(item => item.NEWS_TITLE || item.title)
					.filter(Boolean);

				this.setData({
					noticeList,
					isLoading: false,
					hasError: false
				});
			} else {
				this.setData({
					noticeList: [],
					isLoading: false,
					hasError: false
				});
			}
		} catch (error) {
			console.error('加载公告数据失败：', error);
			this.setData({
				isLoading: false,
				hasError: true,
				noticeList: [] // 失败时清空列表
			});
		}
	},

	/**
	 * 检查公告显示状态
	 */
	checkNoticeStatus() {
		try {
			this.setData({ noticeHidden: false });
		} catch (error) {
			console.error('检查公告状态失败：', error);
		}
	},

	/**
	 * 检查是否有新选择的门店
	 */
	checkSelectedStore() {
		try {
			const app = getApp();
			if (app.globalData && app.globalData.selectedStore) {
				const selectedStore = app.globalData.selectedStore;
				console.log('检测到新选择的门店:', selectedStore);
				
				// 更新页面显示的门店信息
				this.setData({
					storeName: selectedStore.name,
					currentStore: selectedStore
				});
				
				// 清除全局数据，避免重复处理
				app.globalData.selectedStore = null;
				
				console.log('门店信息已更新');
			}
		} catch (error) {
			console.error('检查选择门店失败：', error);
		}
	},

	/**
	 * 公告关闭事件
	 */
	onNoticeClose() {
		try {
			wx.setStorageSync('noticeClosed', true);
			wx.setStorageSync('noticeCloseTime', Date.now());
			this.setData({ noticeHidden: true });
			
			// 埋点统计
			this.reportEvent('home_notice_close', {
				notice_id: 'default',
				timestamp: Date.now()
			});
		} catch (error) {
			console.error('关闭公告失败：', error);
		}
	},

	/**
	 * 切换地址点击事件
	 * 跳转到地址选择页面
	 */
	onSwitchAddressTap() {
		// 跳转到地址选择页面
		wx.navigateTo({
			url: '/pages/booking/select-address/index',
			success: () => {
				console.log('跳转到地址选择页面成功');
			},
			fail: (error) => {
				console.error('跳转到地址选择页面失败：', error);
				// 降级处理：显示地址选择ActionSheet
				this.showStoreActionSheet();
			}
		});
	},

	/**
	 * 加载店铺信息
	 */
	async loadStoreInfo() {
		try {
			const storeManager = app.getStoreManager();
			
			// 尝试获取用户位置
			const location = await this.getUserLocation();
			
			// 使用门店管理器获取最近的门店
			const nearestStore = await storeManager.getNearestStore(location);
			
			if (nearestStore) {
				this.setData({
					storeName: nearestStore.name,
					currentStore: nearestStore
				});
			} else {
				// 最终降级：使用默认名称
				this.setData({
					storeName: '超级泡泡宠物店'
				});
			}
		} catch (error) {
			console.error('加载店铺信息失败:', error);
			this.setData({
				storeName: '超级泡泡宠物店'
			});
		}
	},

	/**
	 * 获取用户位置
	 */
	getUserLocation() {
		return new Promise((resolve) => {
			wx.getLocation({
				type: 'gcj02',
				success: (res) => {
					resolve({
						latitude: res.latitude,
						longitude: res.longitude
					});
				},
				fail: (error) => {
					console.log('获取用户位置失败:', error);
					resolve(null);
				}
			});
		});
	},

	/**
	 * 显示门店选择ActionSheet（降级处理）
	 */
	async showStoreActionSheet() {
		try {
			const storeManager = app.getStoreManager();
			// 获取店铺列表
			const storeList = await storeManager.getStoreList();
			if (storeList && storeList.length > 0) {
				const storeNames = storeList.map(store => store.name);
				wx.showActionSheet({
					itemList: storeNames,
					success: (res) => {
						const selectedStore = storeList[res.tapIndex];
						this.setData({
							storeName: selectedStore.name,
							currentStore: selectedStore
						});
						wx.showToast({
							title: `已切换到${selectedStore.name}`,
							icon: 'success'
						});
					}
				});
			} else {
				// 降级处理：使用默认店铺列表
				wx.showActionSheet({
					itemList: ['仓山店', '台江店', '晋安店'],
					success: (res) => {
						const storeNames = ['仓山店', '台江店', '晋安店'];
						const selectedStore = storeNames[res.tapIndex];
						this.setData({
							storeName: selectedStore
						});
						wx.showToast({
							title: `已切换到${selectedStore}`,
							icon: 'success'
						});
					}
				});
			}
		} catch (error) {
			console.error('获取店铺列表失败:', error);
			// 降级处理：使用默认店铺列表
			wx.showActionSheet({
				itemList: ['仓山店', '台江店', '晋安店'],
				success: (res) => {
					const storeNames = ['仓山店', '台江店', '晋安店'];
					const selectedStore = storeNames[res.tapIndex];
					this.setData({
						storeName: selectedStore
					});
					wx.showToast({
						title: `已切换到${selectedStore}`,
						icon: 'success'
					});
				}
			});
		}
	},

	/**
	 * 拨打电话点击事件
	 * TODO: 接入客服电话配置
	 */
	onTelephoneTap() {
		// 埋点统计
		this.reportEvent('home_telephone_click', {
			user_id: this.getUserId(),
			timestamp: Date.now()
		});
		
		// 跳转到联系客服页面
		wx.navigateTo({
			url: '/pages/user/customer-service/index',
			success: () => {
				console.log('跳转到客服页面成功');
			},
			fail: (error) => {
				console.error('跳转到客服页面失败：', error);
				wx.showToast({
					title: '页面跳转失败',
					icon: 'none'
				});
			}
		});
	},

	/**
	 * 公告图标点击事件
	 * TODO: 接入公告详情页面
	 */
	onNoticeTap() {
		// TODO: 跳转到公告详情页面
		wx.showModal({
			title: '系统公告',
			content: this.data.noticeList.join('\n\n'),
			showCancel: false,
			confirmText: '知道了'
		});
	},

	/**
	 * 宫格点击事件
	 * 处理功能入口点击，跳转对应页面
	 */
	onGridTap(e) {
		const { type, url, useTab } = e.currentTarget.dataset;
		
		// 埋点统计
		this.reportEvent(`home_entrance_${type}`, {
			user_id: this.getUserId(),
			timestamp: Date.now()
		});
		
		// 特殊处理：人工预约显示弹窗提示
		if (type === 'manual') {
			this.showManualBookingDialog();
			return;
		}
		
		// 需要登录校验的功能：寄养预约和账户充值
		if (type === 'booking' || type === 'recharge') {
			// 检查登录状态
			if (!auth.checkLoginStatus()) {
				// 未登录，直接跳转到登录页面
				auth.requireLogin();
				return;
			}
		}
		
		// 页面跳转
		if (url) {
			// 判断是否为 tabBar 页面
			if (useTab) {
				wx.switchTab({
					url,
					fail: (error) => {
						console.error('TabBar页面跳转失败：', error);
						wx.showToast({
							title: '页面跳转失败',
							icon: 'none'
						});
					}
				});
			} else {
				wx.navigateTo({
					url,
					fail: (error) => {
						console.error('页面跳转失败：', error);
						wx.showToast({
							title: '页面跳转失败',
							icon: 'none'
						});
					}
				});
			}
		}
	},

	/**
	 * 显示人工预约弹窗
	 */
	showManualBookingDialog() {
		// 检查登录状态
		if (!auth.checkLoginStatus()) {
			// 未登录，直接跳转到登录页面
			auth.requireLogin();
			return;
		}
		
		this.setData({
			showManualBookingDialog: true
		});
	},

	/**
	 * 关闭人工预约弹窗
	 */
	onManualBookingDialogClose() {
		this.setData({
			showManualBookingDialog: false
		});
	},

	/**
	 * 扫码事件
	 * 直接处理门禁二维码，调用设备控制API
	 */
	onScanTap() {
		// 埋点统计
		this.reportEvent('home_entrance_scan', {
			user_id: this.getUserId(),
			timestamp: Date.now()
		});
		
		wx.scanCode({
			success: (res) => {
				const code = res.result;
				
				// 判断是否为门禁二维码
				if (this.isDoorAccessQR(code)) {
					// 直接处理门禁二维码
					this.handleAccessControlQR(code);
				} else {
					// 跳转到门禁扫码结果页面（兼容旧逻辑）
					wx.navigateTo({
						url: `/pages/access/scan-result?code=${encodeURIComponent(code)}`,
						fail: (error) => {
							console.error('门禁扫码页面跳转失败：', error);
							// 降级处理，直接显示扫码结果
							wx.showModal({
								title: '扫码结果',
								content: `设备码：${code}`,
								showCancel: false
							});
						}
					});
				}
			},
			fail: (error) => {
				console.error('扫码失败：', error);
				if (error.errMsg.includes('cancel')) {
					// 用户取消扫码
					return;
				}
				wx.showToast({
					title: '扫码失败，请重试',
					icon: 'none'
				});
			}
		});
	},

	/**
	 * 判断是否为门禁二维码
	 */
	isDoorAccessQR(code) {
		try {
			// 尝试解析JSON格式
			const qrData = JSON.parse(code);
			console.log('门禁二维码数据(JSON):', qrData);
			// 检查是否包含门禁相关字段（精简版）
			return qrData.type === 'access_control' && 
				   qrData.storeId && 
				   qrData.topic;
		} catch (error) {
			// 尝试简单格式：door_access:storeId:deviceId
			if (code.startsWith('door_access:')) {
				return true;
			}
			// 检查是否包含门禁相关关键词
			if (code.includes('access_control') || code.includes('storeId') || code.includes('topic')) {
				return true;
			}
			return false;
		}
	},

	/**
	 * 处理门禁二维码
	 * @param {string} code 二维码内容
	 */
	async handleAccessControlQR(code) {
		try {
			let qrCodeData = {};
			
			// 尝试解析JSON格式
			try {
				// 先清理可能的特殊字符
				let cleanCode = code.trim();
				// 尝试修复可能的编码问题
				if (cleanCode.includes('\\u')) {
					try {
						cleanCode = JSON.parse('"' + cleanCode + '"');
					} catch (e) {
						// 如果修复失败，继续使用原始代码
					}
				}
				qrCodeData = JSON.parse(cleanCode);
				console.log('门禁二维码数据(JSON):', qrCodeData);
			} catch (jsonError) {
				console.log('JSON解析失败:', jsonError.message);
				console.log('门禁二维码原始数据:', code);
				
				// 尝试从原始字符串中提取JSON部分
				let jsonMatch = code.match(/\{.*\}/);
				if (jsonMatch) {
					try {
						qrCodeData = JSON.parse(jsonMatch[0]);
						console.log('从字符串提取的JSON数据:', qrCodeData);
					} catch (e) {
						console.log('提取JSON失败:', e.message);
					}
				}
				
				// 如果仍然没有解析成功，尝试其他格式
				if (!qrCodeData.type) {
					// 检查是否是简单格式：door_access:storeId:deviceId
					if (code.startsWith('door_access:')) {
						const parts = code.split(':');
						if (parts.length >= 3) {
							qrCodeData = {
								type: 'access_control',
								storeId: parts[1],
								topic: `door/${parts[1]}/${parts[2]}`
							};
						}
					} else {
						// 对于其他格式的门禁二维码，使用默认值（移除storeName避免中文编码问题）
						qrCodeData = {
							type: 'access_control',
							storeId: 'store_001', // 默认店铺ID
							topic: 'door/access/default' // 默认主题
						};
					}
				}
			}
			
			// 验证必要字段
			if (!qrCodeData.storeId || !qrCodeData.topic) {
				wx.showToast({
					title: '二维码格式错误',
					icon: 'none'
				});
				return;
			}
			
			// 显示确认对话框（使用默认门店名称，避免中文编码问题）
			const storeName = '门店';
			const confirmResult = await new Promise((resolve) => {
				wx.showModal({
					title: '开门确认',
					content: `确认要为 ${storeName} 开门吗？`,
					success: (res) => resolve(res.confirm),
					fail: () => resolve(false)
				});
			});
			
			if (!confirmResult) {
				return;
			}
			
			// 显示加载状态
			wx.showLoading({ title: '开门中...' });
			
			// 调用设备控制API
			const result = await apiService.controlDevice(null, 'off', 0, {
				storeId: qrCodeData.storeId,
				topic: qrCodeData.topic
			});
			
			wx.hideLoading();
			
			if (result.success) {
				wx.showToast({
					title: '开门成功',
					icon: 'success'
				});
				
				// 10秒后自动关门
				setTimeout(async () => {
					try {
						await apiService.controlDevice(null, 'on', 0, {
							storeId: qrCodeData.storeId,
							topic: qrCodeData.topic
						});
						console.log('自动关门成功');
					} catch (error) {
						console.error('自动关门失败:', error);
					}
				}, 10000);
			} else {
				wx.showToast({
					title: result.message || '开门失败',
					icon: 'none'
				});
			}
			
		} catch (error) {
			console.error('处理门禁二维码失败:', error);
			wx.hideLoading();
			
			if (error.message && error.message.includes('JSON')) {
				wx.showToast({
					title: '二维码格式错误',
					icon: 'none'
				});
			} else {
				wx.showToast({
					title: '开门失败，请重试',
					icon: 'none'
				});
			}
		}
	},

	/**
	 * 页面浏览埋点
	 */
	reportPageView() {
		this.reportEvent('home_page_view', {
			store_id: 'default_store',
			user_id: this.getUserId(),
			timestamp: Date.now()
		});
	},

	/**
	 * 通用埋点方法
	 * TODO: 接入数据统计服务
	 */
	reportEvent(eventName, params = {}) {
		// TODO: 接入具体的数据统计服务
		console.log('埋点事件：', eventName, params);
		
		// 示例：发送到后端或第三方分析服务
		// wx.request({
		//   url: 'https://api.youranalytics.com/track',
		//   method: 'POST',
		//   data: {
		//     event: eventName,
		//     properties: params
		//   }
		// });
	},

	/**
	 * 获取用户ID
	 * TODO: 接入用户系统
	 */
	getUserId() {
		try {
			// TODO: 从用户系统获取用户ID
			return wx.getStorageSync('userId') || 'anonymous';
		} catch (error) {
			console.error('获取用户ID失败：', error);
			return 'anonymous';
		}
	},

	/**
	 * 重试加载
	 */
	onRetry() {
		this.loadNoticeData();
	},

	/**
	 * 页面相关事件处理函数--监听用户下拉动作
	 */
	onPullDownRefresh() {
		this.loadNoticeData();
		setTimeout(() => {
			wx.stopPullDownRefresh();
		}, 1000);
	},

	/**
	 * 更新TabBar状态的统一方法
	 * @param {number} selectedIndex TabBar选中索引
	 */
	updateTabBarStatus(selectedIndex) {
		console.log(`首页更新TabBar状态: ${selectedIndex}`);
		
		if (typeof this.getTabBar === 'function') {
			// 多重保障的TabBar状态更新
			try {
				const tabBar = this.getTabBar();
				if (tabBar) {
					// 传统模式
					console.log('传统模式更新TabBar');
					if (tabBar.setSelected) {
						tabBar.setSelected(selectedIndex);
					} else {
						tabBar.setData({ selected: selectedIndex });
					}
				} else {
					// skyline模式 - 异步回调
					console.log('Skyline模式异步更新TabBar');
					this.getTabBar((tabBar) => {
						if (tabBar) {
							if (tabBar.setSelected) {
								tabBar.setSelected(selectedIndex);
							} else {
								tabBar.setData({ selected: selectedIndex });
							}
						}
					});
				}
			} catch (error) {
				console.error('TabBar状态更新失败:', error);
				// 降级处理：尝试异步调用
				try {
					this.getTabBar((tabBar) => {
						if (tabBar) {
							if (tabBar.setSelected) {
								tabBar.setSelected(selectedIndex);
							} else {
								tabBar.setData({ selected: selectedIndex });
							}
						}
					});
				} catch (asyncError) {
					console.error('TabBar异步更新也失败:', asyncError);
				}
			}
		} else {
			console.warn('getTabBar方法不可用');
		}
	},

	/**
	 * 用户点击右上角分享
	 */
	onShareAppMessage() {
		return {
			title: '超级泡泡宠物店',
			path: '/pages/home/index/index',
			imageUrl: '/assets/share/share_home.png'
		};
	}
})